As devices, such as cell phones and personal digital assistants, get smaller and the programs loaded on such devices become more complex, the need for efficient data/code storage becomes particularly important. Often smaller embedded systems use flash memory to store object code and constant data.
Currently, to increase the storage capacity of a flash memory, compression algorithms are used to compress stored data. Yet, most compression techniques focus on maximum compression, rather than the performance associated with decompression during execution. In fact, some compression algorithms relocate data in an attempt to achieve maximum compression. To track where the data is relocated to, an index or translation table is usually used.
In a specific example, if code is stored at a first location and then compressed and relocated to a second location, an index table associates the first location with the second location. Therefore, upon a request referencing the first location, the index table is used to retrieve the code now stored at the second location. Yet, the use of a translation table introduces delay into fetching data or code to be operated on or executed.